/**********************************************************************\

 Copyright 2012 Diggory Blake

 This file is part of klip-engine

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.

\**********************************************************************/
#pragma once

#include <map>

class kBasicAnimation;

#include "kanimation.h"
#include "ksequence.h"

class kBasicAnimation : public kAnimation {
private:
	class kBasicSequence : public kSequence {
	public:
		float startTime;
		float loopTime;
		float endTime;
		std::map<float, int> frames;
		bool loop;
	};

	struct kAnimData {
		kBasicSequence* sequence;
		float time;
		float speed;
	};

	std::unordered_map<kSprite*, kAnimData> _sprites;

	int getFrame(kBasicSequence* sequence, float time);

public:
	using kAnimation::play;

	virtual void play(kSprite* sprite, kSequence* sequence);
	virtual void stop(kSprite* sprite);
	virtual void setSpeed(kSprite* sprite, float speed);
	virtual void onUpdate(float delta);
	int getFrame(kSequence* sequence, float time);

	kSequence* createSequence(float frameDuration, int frameStart, int frameEnd, int frameLoop = -1);
	kSequence* createSequence(const std::map<float, int>& frames, float startTime, float loopTime, float endTime, bool loop);
};
